package edu.csumb.itcd.teammario;
import java.util.ArrayList;


public class BulletList implements Runnable {

    private static ArrayList<Bullet> playerBulletArray = new ArrayList<Bullet>();
    private static ArrayList<Bullet> enemyBulletArray = new ArrayList<Bullet>();
    private static ArrayList<Bullet> towerBulletArray = new ArrayList<Bullet>();
    private static ArrayList<Bullet> deadBullets = new ArrayList<Bullet>();
    int bulletCount = 0;
    Thread bulletThread;
    private static Bullet newBullet;

    
    public BulletList()
    {
        bulletThread = new Thread(this);
        bulletThread.start();
    }
    public static ArrayList <Bullet> getPlayerBulletArray()
    {
        return BulletList.playerBulletArray;
        
    }
    public static ArrayList <Bullet> getEnemyBulletArray()
    {
        return BulletList.enemyBulletArray;
        
    }
    public static ArrayList <Bullet> getTowerBulletArray()
    {
        return BulletList.towerBulletArray;
        
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
    	while (true)
    	{
    		if (Setup.isPaused() == false)
    		{
    			synchronized (BulletList.playerBulletArray)
    			{
	                for (Bullet bullet : playerBulletArray)
	                {
	                    if (bullet.bulletIsActive() == true)
	                    {
	                        bullet.movebullet();
	                    }
	                    if (bullet.bulletIsActive()== false){
	                    	deadBullets.add(bullet);
	                    
	                    }
	                }
    			}
	            synchronized (BulletList.enemyBulletArray)
	            {
	                for (Bullet bullet : enemyBulletArray)
	                {
	                    if (bullet.bulletIsActive() == true)
	                    {
	                        bullet.movebullet();
	                    }
	                    if (bullet.bulletIsActive()== false){
	                    	deadBullets.add(bullet);
	                    
	                    }
	                }
	            }
	            synchronized (BulletList.towerBulletArray)
	            {
	                for (Bullet bullet : towerBulletArray)
	                {
	                    if (bullet.bulletIsActive() == true)
	                    {
	                        bullet.movebullet();
	                    }
	                    if (bullet.bulletIsActive()== false){
	                    	deadBullets.add(bullet);
	                    
	                    }
	                }
	            }
            
	            dropBullets();
    		}
    		
            try
            {
                Thread.sleep(30);
            }
            catch(InterruptedException ex)
            {
                
            }
    	}
            
    }
    public static void addPlayerBullet(Bullet bullet){
        
        synchronized(BulletList.playerBulletArray)
        {
            playerBulletArray.add(bullet);
        }

    }
    public static void addEnemyBullet(Bullet bullet){
        
        synchronized(BulletList.enemyBulletArray)
        {
            enemyBulletArray.add(bullet);
        }

    }
    public static void addTowerBullet(Bullet bullet){
        
        synchronized(BulletList.towerBulletArray)
        {
            towerBulletArray.add(bullet);
        }

    }
    private static void dropBullets(){

        
        for (Bullet bullet : deadBullets)
        {
            synchronized(BulletList.playerBulletArray)
            {
                if(playerBulletArray.contains(bullet))
                {
                    playerBulletArray.remove(playerBulletArray.indexOf(bullet));
                }
            }
            synchronized(BulletList.enemyBulletArray)
            {
                if(enemyBulletArray.contains(bullet))
                {
                    enemyBulletArray.remove(enemyBulletArray.indexOf(bullet));
                }
            }
            synchronized(BulletList.towerBulletArray)
            {
                if(towerBulletArray.contains(bullet))
                {
                    towerBulletArray.remove(towerBulletArray.indexOf(bullet));
                }
            }
            
        }
        
        deadBullets.clear();
    }
	public void reset() {
		// TODO Auto-generated method stub
		playerBulletArray.clear();
		enemyBulletArray.clear();
		towerBulletArray.clear();
	}
}

